package com.zqs.compareface.server.apiserver;


import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.zqs.compareface.dao.UserData;
import com.zqs.compareface.utils.impl.FaceApiUtil;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * @program: FaceCompar
 * @description:
 * @author: ZQS
 * @create: 2021-08-07 17:50
 */
public class BaiduApiJudge {
    /**
     * 指定两张自定义照片进行人脸对比 1：1
     * @param
     */
    public void oneToOne(String userData, String userInData) {
        //调用连接接口
        AipFace client = FaceApiUtil.getAipFace();

        //"base64_1";
        String image1 = userData;
        //"base64_2";
        String image2 = userInData;

        // image1/image2也可以为url或facetoken, 相应的imageType参数需要与之对应。
        MatchRequest req1 = new MatchRequest(image1, "BASE64");
        MatchRequest req2 = new MatchRequest(image2, "BASE64");
        ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();
        requests.add(req1);
        requests.add(req2);

        JSONObject res = client.match(requests);
        System.out.println(res.toString(2));

    }

    /**
     * 自定义照片与指定的人脸库中的userid对比
     * @param userdata
     * @param imageTypes
     * @return
     */
    public static JSONObject faceToFaceCompare(UserData userdata, String imageTypes) {
            HashMap<String, String> options = new HashMap<String, String>();
            /**
             * 最多处理人脸的数量,默认值为1(仅检测图片中面积最大的那个人脸) 最大值10
             */
            options.put("max_face_num", "1");
            /**
             * 	匹配阈值（设置阈值后，score低于此阈值的用户信息将不会返回） 最大100 最小0 默认80
             * 此阈值设置得越高，检索速度将会越快，推荐使用默认阈值80
             */
            options.put("match_threshold", "80");
            /**
             * 图片质量控制 NONE: 不进行控制 LOW:较低的质量要求 NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认 NONE
             */
            options.put("quality_control", "NONE");
            /**
             * 体检测控制 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONE
             */
            options.put("liveness_control", "NONE");
            /**
             * 当需要对特定用户进行比对时，指定user_id进行比对。即人脸认证功能。
             */
            options.put("user_id", userdata.getUserid());
            /**
             * 查找后返回的用户数量。返回相似度最高的几个用户，默认为1，最多返回50个。
             */
            options.put("max_user_num", "1");
            /**
             * "取决于image_type参数，传入BASE64字符串或URL字符串或FACE_TOKEN字符串"
             *
             */
            String imageType = imageTypes;
            String image = userdata.getUserImage();
            /**
             * 从指定的group中进行查找 用逗号分隔，上限10个
             */
            String groupIdList = userdata.getGroup();

            //调用连接接口
            AipFace client = FaceApiUtil.getAipFace();
            JSONObject result = client.search(image, imageType, groupIdList, options);
            return result;
    }

    /**
     * 从整个人脸库中查找对比与之对比相似的
     */
    public void searchFaceFromAllLibrary(){
            //TODO 从整个人脸库中查找对比与之对比相似的
    }
}
